public class code01 {
//    力扣 150 二叉树的层序遍历
public List<List<Integer>> levelOrder(TreeNode root) {
    // 如果当前的数为 null 依照题意，此时创建一个完全为 空 的一个新顺序表返回即可
    if(root == null) {
        return new ArrayList<>();
    }

    // 对于层序遍历可以使用队列来记录每一层的节点元素
    // 再使用一个顺序表来记录每一层的节点元素

    Queue<TreeNode> queue = new LinkedList<>();

    // 创建一个返回顺序表，用来记录返回值信息
    List<List<Integer>> re = new ArrayList<>();

    // 首先，先将 root 节点记录到队列中
    queue.offer(root);

    // 通迭代来实现层序遍历
    while(!queue.isEmpty()) {
        // 获取当前队列的长度，将值进行存储
        int size = queue.size();

        // 创建一个新的顺序表，用来存储当前行的信息
        List<Integer> temp = new ArrayList<>();

        for(int i = 0; i < size; i++) {
            // 获取到队列中的节点，并且将其中的元素存储到前面定义的顺序表中
            TreeNode node = queue.poll();
            temp.add(node.val);

            // 之后来考虑其他层的情况
            TreeNode left = node.left;
            TreeNode right = node.right;

            if(left != null) {
                queue.offer(left);
            }
            if(right != null) {
                queue.offer(right);
            }
        }
        // 完成一次 for 循环之后，就将当前的新数组存储到返回的数据表中
        re.add(temp);
    }

    // 最后返回构造好的数组
    return re;
}
}
